package main

import (
	"Three/project01/chatroom/common/message"
	"Three/project01/chatroom/server/process"
	"Three/project01/chatroom/server/utils"
	"fmt"
	"io"
	"net"
)

//先创建一个processor结构体
type Processor struct {
	Conn net.Conn
}

//编写一个ServerProcessMes函数
//根据客户端发送消息种类不同，决定调用那个函数处理
func (this *Processor) serverProcessMse(mes *message.Message) (err error) {

	//看看是否能接受到客户端群发的消息
	//fmt.Println("mes=",mes)

	switch (*mes).Type {
	case message.LoginMesType:
		//处理登录
		//创建一个UserProcess实例
		up := &process.UserProcess{
			Conn: this.Conn,
		}
		err = up.ServerProcessLogin(mes)
		if err != nil {
			return
		}
	case message.RegisterMesType:
		//处理注册
		up := &process.UserProcess{
			Conn: this.Conn,
		}
		err = up.ServerProcessRegister(mes)
		if err != nil {
			return
		}
	case message.SmsMesType:
		//创建一个SmsProcess完成转发群聊消息。。
		smsProcess := &process.SmsProcess{}
		smsProcess.SendGroupMes(mes)

	default:
		fmt.Println("消息类型不存在，无法处理...")

	}
	return
}

func (this *Processor) process() (err error) {
	tf := &utils.Transfer{
		Conn: this.Conn,
	}
	//循环读客户端发送的信息
	for {

		//这里将读取数据包封装为一个函数readPkg()，返回message,err
		//创建一个Transfer实例完成读包任务

		mes, err := tf.ReadPkg()
		if err != nil {
			if err == io.EOF {
				fmt.Println("客户端退出，服务的也退出..")
				return err
			} else {
				fmt.Println("readPkg err=", err)
				return err
			}
		}
		err = this.serverProcessMse(&mes)
		if err != nil {
			return err
		}
	}
}
